#include <mod/include/KEYPAD.h>

/***********************************************************************************************************************
*
*        KEYBOARD maakt gebruik van I2C.
*
*        Versie 0.1  04/06/2010
*        Opstellen KEYBOARD programma.
*
***********************************************************************************************************************/


unsigned char KeypadK = 0, KeypadR = 0, Keypad = 0, Optellen = 0;

unsigned char KEYBOARD_Read(void)
{
  unsigned char IOReadB;
  Optellen=0;
  KeypadK =0;
  KeypadR =0;
  IO_EXPENDER_1_Direction(0x0F);        //Maak de pinnen 5 t/m 8 hoog (rijen zijn nu hoog).
  IOReadB=IO_EXPENDER_1_Read();
  IOReadB=(~IOReadB)&0x0F;
  switch(IOReadB)
  {
    case(0x01):{ KeypadR = 0x01;}  break;
    case(0x02):{ KeypadR = 0x02;}  break; 
    case(0x04):{ KeypadR = 0x04;}  break; 
    case(0x08):{ KeypadR = 0x08;}  break;    
  } 
  
  Optellen |= KeypadR;
    
  IO_EXPENDER_1_Direction(0xF0);        //Maak de pinnen 5 t/m 8 hoog (rijen zijn nu hoog).
  IOReadB=IO_EXPENDER_1_Read();
  IOReadB=(~IOReadB)&0xF0;
  switch(IOReadB)
  {
    case(0x10):{ KeypadK = 0x10;}  break;
    case(0x20):{ KeypadK = 0x20;}  break; 
    case(0x40):{ KeypadK = 0x40;}  break; 
    case(0x80):{ KeypadK = 0x80;}  break;    
  } 
  
  Optellen |= KeypadK;
  
  switch(Optellen)
  {                                      //Let op waardes staan weergeven in ASCII code!
  case(0x88):{ Keypad = '1';}  break;    //1
  case(0x48):{ Keypad = '2';}  break;    //2
  case(0x28):{ Keypad = '3';}  break;    //3
  case(0x18):{ Keypad = 'A';}  break;    //A
  
  case(0x84):{ Keypad = '4';}  break;    //4 
  case(0x44):{ Keypad = '5';}  break;    //5
  case(0x24):{ Keypad = '6';}  break;    //6
  case(0x14):{ Keypad = 'B';}  break;    //B
  
  case(0x82):{ Keypad = '7';}  break;    //7
  case(0x42):{ Keypad = '8';}  break;    //8
  case(0x22):{ Keypad = '9';}  break;    //9
  case(0x12):{ Keypad = 'C';}  break;    //C
  
  case(0x81):{ Keypad = '*';}  break;    //*
  case(0x41):{ Keypad = '0';}  break;    //0
  case(0x21):{ Keypad = '#';}  break;    //#
  case(0x11):{ Keypad = 'D';}  break;    //D
  default:{ Keypad = ' ';}  break;
  }
  return(Keypad);
}

